<?php

namespace app\api\model;

use app\api\service\Api;
use think\Db;
use think\Request;

class ProductModel extends Api
{
    protected static $instance;

    public function __construct(Request $request = null)
    {
        parent::__construct($request);
    }

    public static function getInstance()
    {
        if (is_null(self::$instance))
        {
            self::$instance = new static();
        }
        return self::$instance;
    }

    /**
     * 获取指定数据列表
     */
    public function select($where, $field = '*', $order = 'sort')
    {
        return Db::name('product_config')->where($where)->order($order)->field($field)->select();
    }

    /**
     * 获取指定产品基础信息
     */
    public function find($id, $field = '*')
    {
        return $baseInfo = Db::name('product')->where([
            'id' => ['eq', $id]
        ])->field($field)->find();
    }

    /**
     * 获取产品配置字段
     */
    public function getProductConfig()
    {
        return Db::name('product_config')->where([
            'status' => ['eq', 1]
        ])->column('title, name, identi, is_must', 'id');
    }

    /**
     * 添加产品基础信息
     */
    public function insertBase($data)
    {
        Db::name('product')->insert($data);
        return Db::name('product')->getLastInsID();
    }

    /**
     * 查询指定参数
     */
    public function column($where, $field = 'id')
    {
        return Db::name('product')->where($where)->column($field, 'id');
    }

    /**
     * 编辑产品基础信息
     */
    public function updateBase($id, $data)
    {
        return Db::name('product')->where([
            'id' => ['eq', $id]
        ])->update($data);
    }

    /**
     * 获取指定产品配置信息
     */
    public function columnInfo($proId, $field = '*')
    {
        $list = Db::name('product_info')->where([
            'pro_id' => ['eq', $proId]
        ])->column($field, 'field');
        return $list;
    }

    /**
     * 添加产品配置信息
     */
    public function insertAll($data)
    {
        return Db::name('product_info')->insertAll($data);
    }

    /**
     * 删除指定产品配置信息
     */
    public function deleteAll($proId)
    {
        return Db::name('product_info')->where([
            'pro_id' => ['eq', $proId]
        ])->delete();
    }

    /**
     * 获取指定产品总数
     */
    public function countProduct($where)
    {
        return Db::name('product')->where($where)->count();
    }

    /**
     * 获取指定产品列表信息
     */
    public function selectProduct($where, $field = '*', $start = 0, $limit = 100000, $order = 'id DESC')
    {
        return Db::name('product')->where($where)->limit($start, $limit)->order($order)->field($field)->select();
    }

    /**
     * 获取产品配置表指定字段信息
     */
    public function value($where, $field = 'value')
    {
        return Db::name('product_config')->where($where)->value($field);
    }

    /**
     * *******
     */
    public function productValue($where, $field = 'id')
    {
        return Db::name('product')->where($where)->value($field);
    }
}